package com.zyhl.gmall.product.mytest.demo06;

import java.util.function.Function;

/**
 * Function接口
 * Function<T,R>接口通常用于对参数进行处理，转换(处理逻辑由Lambda表达式实现)，然后返回一个新的值
 *
 * 常用方法:
 * 方法名              说明
 * R apply(T t)     将此函数应用于给定的参数
 * default Function andThen(Function after)
 * 返回一个组合函数，首先将该函数应用于输入，然后将after函数应用于结果
 */
public class FunctionDemo {

    public static void main(String[] args) {

        //把一个字符串转换int类型
        //convert("10",s -> Integer.parseInt(s)+1);

        //把一个int类型的数据加上一个整数之后，转为字符串
        //convert(100,s->String.valueOf(s+100));

        //把一个字符串转换int类型，把int类型的数据加上一个整数之后，转为字符串
        convert("20",stu->Integer.parseInt(stu),
                i->String.valueOf(i+200) );
    }

    //定义一个方法，把一个字符串转换int类型，在控制台输出
    private static void convert(String str,
                                Function<String,Integer> fun){
        Integer apply = fun.apply(str);
        System.out.println(apply);
    }

    //定义一个方法，把一个int类型的数据加上一个整数之后，转为字符串在控制台输出
    private static void convert(Integer in,
                                Function<Integer,String> fun){
        String apply = fun.apply(in);
        System.out.println(apply);
    }

    //定义一个方法，把一个字符串转换int类型，把int类型的数据加上一个整数之后，转为字符串在控制台输出
    private static void convert(String s,
                                Function<String,Integer> fun1,
                                Function<Integer,String> fun2){
        String apply = fun1.andThen(fun2).apply(s);
        System.out.println(apply);
    }

}
